#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
const int N=120005;
bool vis[N];
struct Tire{
    int Next[N][26];
    int fail[N];
    int end[N];
    int root;
    int L;
    int newNode(){
        for(int i=0;i<10;i++){
            Next[L][i]=-1;
        }
        end[L++]=0;
        return L-1;
    }
    void init(){
        L=0;
        root=newNode();
    }
    void insert(char* buf,int id){
        int l=strlen(buf);
        int now=root;
        for(int i=0;i<l;i++){
            if(Next[now][buf[i]-'0']==-1){
                Next[now][buf[i]-'0']=newNode();
            }
            now=Next[now][buf[i]-'0'];
        }
        end[now]=id;
    }
    void build(){
        queue<int> q;
        fail[root]=root;
        for(int i=0;i<10;i++){
            if(Next[root][i]==-1){
                Next[root][i]=root;
            }
            else{
                fail[Next[root][i]]=root;
                q.push(Next[root][i]);
            }
        }
        while(!q.empty()){
            int now=q.front();
            q.pop();
            for(int i=0;i<10;i++){
                if(Next[now][i]==-1){
                    Next[now][i]=Next[fail[now]][i];
                }
                else{
                   fail[Next[now][i]]=Next[fail[now]][i];
                   q.push(Next[now][i]);
                }
            }
        }
    }
    void query(char* buf){
        int l=strlen(buf);
        int now=root;
        bool flag=false;
        for(int i=0;i<l;i++){
            now=Next[now][buf[i]-'0'];
            int tmp=now;
            while(tmp!=root){
                if(end[tmp]!=0){
                    if(!flag){
                        printf("Found key:" );
                        flag=true;
                    }
                    printf(" [Key No. %d]", end[tmp]);
                    end[tmp]=0;
                }
                tmp=fail[tmp];
            }
        }
        if(!flag){
            printf("No key can be found !");
        }
        else{
            printf("\n");
        }
    }
}ac;
char str[N];
char t[N/2];
int main(void){
    //freopen("data.txt","r",stdin);
    int n,m;
    scanf("%d%d",&n,&m);
    memset(str,'\0',sizeof(str));
    for(int i=0;i<n;i++){
        scanf("%s",t);
        strcat(str,t);
    }
    ac.init();
    int id;
    char s1[100];
    char s2[100];
    char s3[100];
    for(int i=1;i<=m;i++){
        scanf("%s%s%d%s%s",s1,s2,&id,s3,t);
        ac.insert(t, id);
    }
    ac.build();
    ac.query(str);
    return 0;
}